#include "Fonction.hpp"

#include <iostream>

using namespace std;
using namespace CalculIntegral;
using namespace boost::numeric::ublas;

Fonction::Fonction( const MatriceFct& fcts )
  : MatriceDerivee( fcts ),
    NbrLignes( fcts.size1() ), NbrColonnes( fcts.size2() )
{}

Fonction::Fonction( FonctionElementaire fct
		    /*Point (*fct)( const Point& val, const Point& pt )*/ )
  : MatriceDerivee( scalar_matrix< FonctionElementaire >( 1, 1, fct ) ),
    NbrLignes( 1 ), NbrColonnes( 1 )
{}

Fonction::~Fonction()
{}

const unsigned& Fonction::nbrLignes() const
{
  return NbrLignes;
}

const unsigned& Fonction::nbrColonnes() const
{
  return NbrColonnes;
}

MatriceBase Fonction::operator()( const Point& val, const Point& t ) const
{
  assert( val.dimension() == nbrLignes() );
  assert( t.dimension() == nbrColonnes() );

  MatriceBase resultat( zero_matrix< double >( NbrLignes, NbrColonnes ) );

  unsigned i, j;

  for ( i = 0; i < NbrLignes; i++ )
    {
      for ( j = 0; j < NbrColonnes; j++ )
	{
	  resultat( i, j ) = MatriceDerivee( i, j )( val( i ), t( j ) );
	}
    }

  return resultat;
}

